package in.lib.manager; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.text.TextUtils; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import in.lib.Constants; import in.model.User; import lombok.Getter; import lombok.Setter; public class UserManager { private static UserManager instance; public static UserManager getInstance() { if (instance == null) { synchronized (UserManager.class) { if (instance == null) { instance = new UserManager(); } } } return instance; } // TODO: Add user variables @Getter private Context context; @Getter private User user; @Getter @Setter private String accessToken = ""; private UserManager() { } public void initialise(Context context) { this.context = context.getApplicationContext(); loginUser(); } public void loginUser() { SharedPreferences authPrefs = context.getSharedPreferences(Constants.PREFS_AUTH, Context.MODE_PRIVATE); String selectedUser = authPrefs.getString(Constants.PREFS_AUTH_SELECTED_USER, "-1"); String accessToken = authPrefs.getString(String.format(Constants.PREFS_AUTH_USER_ACCESS_TOKEN, selectedUser), ""); if (!TextUtils.isEmpty(accessToken)) { this.accessToken = accessToken; this.user = User.load(selectedUser); } } public List<String> getLinkedUserIds() { SharedPreferences authPrefs = context.getSharedPreferences(Constants.PREFS_AUTH, Context.MODE_PRIVATE); Map<String, ?> prefMap = authPrefs.getAll(); Iterator<String> keys = prefMap.keySet ().iterator(); List<String> users = new ArrayList<String>(prefMap.size()); String[] parts = String.format(Constants.PREFS_AUTH_USER_ACCESS_TOKEN, ":").split(":"); while (keys.hasNext()) { users.add(keys.next().replace(parts[0], "").replace(parts[1], "")); } return users; } public void addUser(User user, String accessToken) { Editor authPrefs = context.getSharedPreferences(Constants.PREFS_AUTH, Context.MODE_PRIVATE).edit(); authPrefs.putString(String.format(Constants.PREFS_AUTH_USER_ACCESS_TOKEN, user.getId()), accessToken); authPrefs.apply(); } public void setUser(User user, String accessToken) { addUser(user, accessToken); selectUser(user); this.user = user; this.accessToken = accessToken; } public String getToken(String userId) { SharedPreferences authPrefs = context.getSharedPreferences(Constants.PREFS_AUTH, Context.MODE_PRIVATE); return authPrefs.getString(String.format(Constants.PREFS_AUTH_USER_ACCESS_TOKEN, userId), ""); } public boolean isLoggedIn() { return !TextUtils.isEmpty(accessToken) && user != null; } public void selectUser(User user) { SharedPreferences prefs = context.getSharedPreferences(Constants.PREFS_AUTH, Context.MODE_PRIVATE); Editor authPrefs = prefs.edit(); authPrefs.putString(Constants.PREFS_AUTH_SELECTED_USER, user.getId()); authPrefs.apply(); this.user = user; this.accessToken = prefs.getString(String.format(Constants.PREFS_AUTH_USER_ACCESS_TOKEN, user.getId()), ""); } }